home *** CD-ROM | disk | FTP | other *** search
- page ,132
- ;--------------------------
- ; This text is a partial listing of BIOS low memory
- ; see tech ref.
- ; Malcolm McCorquodale
- ;--------------------------
- data segment at 40h
- rs232_base dw 4 dup(?) ;addr of rs232 adapters.
- printer_base dw 4 dup(?) ;addr of printers
- equip_flag dw ? ;installed hardware
- mfg_test db ? ;initialization flag
- memory_size dw ? ;memory size in k bytes
- io_ram_size dw ? ;memory in I/O channel
- ;--------------------------
- ; keyboard data areas
- ;--------------------------
- kb_flag db ?
-
- ;---------- shift flag equates w/i kb_flag
-
- ins_state equ 80h ;insert state is active
- caps_state equ 40h ;caps lock state has been toggled
- num_state equ 20h ;num lock state has been toggled
- scroll_state equ 10h ;scroll lock state has been toggled
- alt_shift equ 08h ;alt shift key depressed
- ctl_shift equ 04h ;ctl shift key depressed
- left_shift equ 02h ;left shift key depressed
- right_shift equ 01h ;right shift key depressed
-
- kb_flag_1 db ?
-
- ins_shift equ 80h ;insert state is depressed
- caps_shift equ 40h ;caps lock state is depressed
- num_shift equ 20h ;num lock state is depressed
- scroll_shift equ 10h ;scroll lock state is depressed
- hold_state equ 08h ;suspend key has been toggled
-
- alt_input db ? ;storage for alternate keypad entry
- buffer_head dw ? ;ptr to head of keyboard buffer
- buffer_tail dw ? ;pointer to tail of keyboard buffer
- kb_buffer dw 16 dup(?) ; room for 15 entries
- kb_buffer_end label word
- ;---------------------------------
- ; diskette data areas w/o equates
- ;---------------------------------
- seek_status db ?
- motor_status db ?
- motor_count db ?
- diskette_status db ?
- nec_status db 7 dup(?)
- ;----------------------------------
- ; video display data area
- ;----------------------------------
- crt_mode db ? ;current crt mode
- crt_cols dw ? ;number of columns on screen
- crt_len dw ? ;length of regen in bytes
- crt_start dw ? ;starting address in regen buffer
- cursor_posn dw 8 dup(?) ;cursor for each of up to 8 pages
- cursor_mode dw ? ;current cursor mode setting
- active_page db ? ;current page being displayed
- addr_6845 dw ? ;base address for active display card
- crt_mode_set db ? ;current setting of the 3x8 register
- crt_pallette db ? ;current pallette setting color card
- data ends
-
- ;--------------------------------
- ; video diplay buffer
- ;--------------------------------
- video_ram segment at 0b800h
- regen label byte
- regenw label word
- video_ram ends
-
- ;--------------------------------
- ; Stack segment
- ;--------------------------------
- stack segment stack 'stack'
- stk db 32 dup (?)
- stack ends
- ; from gaithersburg md ibm pc bulletin board 19mar83
- ;
- ;
- SUBTTL ROM BIOS DATA AREAS AND EQUATES
- ;--------------------------------
- ; EQUATES
- ;--------------------------------
- PORT_A EQU 60H ; 8255 PORT A ADDR
- PORT_B EQU 61H ; 8255 PORT B ADDR
- PORT_C EQU 62H ; 8255 PORT C ADDR
- CMD_PORT EQU 63H
- INTA00 EQU 20H ; 8259 PORT
- INTA01 EQU 21H ; 8259 PORT
- EOI EQU 20H
- TIMER EQU 40H
- TIM_CTL EQU 43H ; 8253 TIMER CONTROL PORT ADDR
- TIMER0 EQU 40H ; 8253 TIMER/CNTER 0 PORT ADDR
- TMINT EQU 01 ; TIMER 0 INTR RECVD MASK
- DMA08 EQU 08 ; DMA STATUS REG PORT ADDR
- DMA EQU 00 ; DMA CHANNEL 0 ADDRESS REG PORT ADDR
- MAX_PERIOD EQU 540H
- MIN_PERIOD EQU 410H
- KBD_IN EQU 60H ; KEYBOARD DATA IN ADDR PORT
- KBDINT EQU 02 ; KEYBOARD INTR MASK
- KB_DATA EQU 60H ; KEYBOARD SCAN CODE PORT
- KB_CTL EQU 61H ; CONTROL BITS FOR KEYBOARD SENSE DATA
- ;--------------------------------
- ; 8088 INTERRUPT LOCATIONS
- ;--------------------------------
- ABS0 SEGMENT AT 0
- STG_LOC0 LABEL BYTE
- ORG 2*4
- NMI_PTR LABEL WORD
- ORG 5*4
- INTS_PTR LABEL WORD
- ORG 8*4
- INT_ADDR LABEL WORD
- INT_PTR LABEL DWORD
- ORG 10H*4
- VIDEO_INT LABEL WORD
- ORG 1DH*4
- PARM_PTR LABEL DWORD ; POINTER TO VIDEO PARMS
- ORG 01EH*4 ; INTERRUPT 1EH
- DISK_PTR LABEL DWORD
- ORG 01FH*4 ; LOCATION OF POINTER
- EXT_PTR LABEL DWORD ; POINTER TO EXTENSION
- ORG 7C00H
- BOOT_LOCN LABEL FAR
- ABS0 ENDS
- PAGE
- ;--------------------------------
- ; STACK -- USED DURING INITIALIZATION ONLY
- ;--------------------------------
- STACK SEGMENT AT 30H
- DW 128 DUP(?)
- TOS LABEL WORD
- STACK ENDS
- ;--------------------------------
- ; ROM BIOS DATA AREAS
- ;--------------------------------
- DATA SEGMENT AT 40H
- RS232_BASE DW 4 DUP(?) ; ADDRESSES OF RS232 ADAPTERS
- PRINTER_BASE DW 4 DUP(?) ; ADDRESSES OF PRINTERS
- EQUIP_FLAG DW ? ; INSTALLED HARDWARE
- MFG_TST DB ? ; INITIALIZATION FLAG
- MEMORY_SIZE DW ? ; MEMORY SIZE IN K BYTES
- IO_RAM_SIZE DW ? ; MEMORY IN I/O CHANNEL
- PAGE
- ;-------------------------------
- ; KEYBOARD DATA AREAS
- ;-------------------------------
- KB_FLAG DB ?
- ;------ SHIFT FLAG EQUATES WITHIN KB_FLAG
- INS_STATE EQU 80H ; INSERT STATE IS ACTIVE
- CAPS_STATE EQU 40H ; CAPS LOCK STATE HAS BEEN TOGGLED
- NUM_STATE EQU 20H ; NUM LOCK STATE HAS BEEN TOGGLED
- SCROLL_STATE EQU 10H ; SCROLL LOCK STATE HAS BEEN TOGGLED
- ALT_STATE EQU 08H ; ALTERNATE SHIFT KEY DEPRESSED
- CTL_SHIFT EQU 04H ; CONTROL SHIFT KEY DEPRESSED
- LEFT_SHIFT EQU 02H ; LEFT SHIFT KEY DEPRESSED
- RIGHT_SHIFT EQU 01H ; RIGHT SHIFT KEY DEPRESSED
- ;-------------------------------
- KB_FLAG_1 DB ? ; SECOND BYTE OF KEYBOARD STATUS
- INS_SHIFT EQU 80H ; INSERT KEY IS DEPRESSED
- CAPS_SHIFT EQU 40H ; CAPS LOCK KEY IS DEPRESSED
- NUM_SHIFT EQU 20H ; NUM LOCK KEY IS DEPRESSED
- SCROLL_SHIFT EQU 10H ; SCROLL LOCK KEY IS DEPRESSED
- HOLD_STATE EQU 08H ; SUSPEND KEY HAS BEEN TOGGLED
- ;-------------------------------
- ALT_INPUT DB ? ; STORAGE FOR ALTERNATE KEYPAD ENTRY
- BUFFER_HEAD DW ? ; POINTER TO HEAD OF KEYBOARD BUFFER
- BUFFER_TAIL DW ? ; POINTER TO TAIL OF KEYBOARD BUFFER
- KB_BUFFER DW 16 DUP(?) ; ROOM FOR 15 ENTRIES
- KB_BUFFER_END LABEL WORD
- ;------ HEAD = TAIL INDICATES THAT THE BUFFER IS EMPTY
- NUM_KEY EQU 69 ; SCAN CODE FOR NUMBER LOCK
- SCROLL_KEY EQU 70 ; SCROLL LOCK KEY
- ALT_KEY EQU 56 ; ALTERNATE SHIFT KEY SCAN CODE
- CTL_KEY EQU 29 ; SCAN CODE FOR CONTROL KEY
- CAPS_KEY EQU 58 ; SCAN CODE FOR SHIFT LOCK
- LEFT_KEY EQU 42 ; SCAN CODE FOR LEFT SHIFT
- RIGHT_KEY EQU 54 ; SCAN CODE FOR RIGHT SHIFT
- INS_KEY EQU 82 ; SCAN CODE FOR INSERT KEY
- DEL_KEY EQU 83 ; SCAN CODE FOR DELETE KEY
- PAGE
- ;-------------------------------
- ; DISKETTE DATA AREAS
- ;-------------------------------
- SEEK_STATUS DB ? ; DRIVE RECALIBRATION STATUS
- ; BIT 3-0 = DRIVE 3-0 NEEDS RECAL BEFORE
- ; NEXT SEEK IF BIT IS = 0
- INT_FLAG EQU 080H ; INTERRUPT OCCURRENCE FLAG
- MOTOR_STATUS DB ? ; MOTOR STATUS
- ; BIT 3-0 = DRIVE 3-0 IS CURRENTLY RUNNING
- ; BIT 7 = CURRENT OPERATION IS A WRITE, REQUIRES DELAY
- MOTOR_COUNT DB ? ; TIME OUT COUNTER FOR DRIVE TURN OFF
- MOTOR_WAIT EQU 37 ; TWO SECONDS OF COUNTS FOR MOTOR TURN OFF
- ;
- DISKETTE_STATUS DB ? ; SINGLE BYTE OF RETURN CODE INFO FOR STATUS
- TIME_OUT EQU 80H ; ATTACHMENT FAILED TO RESPOND
- BAD_SEEK EQU 40H ; SEEK OPERATION FAILED
- BAD_NEC EQU 20H ; NEC CONTROLLER HAS FAILED
- BAD_CRC EQU 10H ; BAD CRC ON DISKETTE READ
- DMA_BOUNDARY EQU 09H ; ATTEMPT TO DMA ACROSS 64K BOUNDARY
- BAD_DMA EQU 08H ; DMA OVERRUN ON OPERATION
- RECORD_NOT_FND EQU 04H ; REQUESTED SECTOR NOT FOUND
- WRITE_PROTECT EQU 03H ; WRITE ATTEMPTED ON WRITE PROT DISK
- BAD_ADDR_MARK EQU 02H ; ADDRESS MARK NOT FOUND
- BAD_CMD EQU 01H ; BAD COMMAND PASSED TO DISKETTE I/O
- ;
- NEC_STATUS DB 7 DUP(?) ; STATUS BYTES FROM NEC
- ;--------------------------------
- ; VIDEO DISPLAY DATA AREA
- ;--------------------------------
- CRT_MODE DB ? ; CURRENT CRT MODE
- CRT_COLS DW ? ; NUMBER OF COLUMNS ON SCREEN
- CRT_LEN DW ? ; LENGTH OF REGEN IN BYTES
- CRT_START DW ? ; STARTING ADDRESS IN REGEN BUFFER
- CURSOR_POSN DW 8 DUP(?) ; CURSOR FOR EACH OF UP TO 8 PAGES
- CURSOR_MODE DW ? ; CURRENT CURSOR MODE SETTING
- ACTIVE_PAGE DB ? ; CURRENT PAGE BEING DISPLAYED
- ADDR_6845 DW ? ; BASE ADDRESS FOR ACTIVE DISPLAY CARD
- CRT_MODE_SET DB ? ; CURRENT SETTING OF THE 3X8 REGISTER
- CRT_PALLETTE DB ? ; CURRENT PALLETTE SETTING COLOR CARD
- PAGE
- ;--------------------------------
- ; CASSETTE DATA AREA
- ;--------------------------------
- EDGE_CNT DW ? ; TIME COUNT AT DATA EDGE
- CRC_REG DW ? ; CRC REGISTER
- LAST_VAL DB ? ; LAST INPUT VALUE
- ;--------------------------------
- ; TIMER DATA AREA
- ;--------------------------------
- TIMER_LOW DW ? ; LOW WORD OF TIMER COUNT
- TIMER_HIGH DW ? ; HIGH WORD OF TIMER COUNT
- TIMER_OFL DB ? ; TIMER HAS ROLLED OVER SINCE LAST READ
- ;COUNTS_SEC EQU 18
- ;COUNTS_MIN EQU 1092
- ;COUNTS_HOUR EQU 65543
- ;COUNTS_DAY EQU 1573040 = 1800B0H
- ;-------------------------------
- ; SYSTEM DATA AREA
- ;-------------------------------
- BIOS_BREAK DB ? ; BIT 7 = 1 IF BREAK KEY HAS BEEN DEPRESSED
- RESET_FLAG DW ? ; WORD = 1234H IF KEYBOARD RESET UNDERWAY
- DATA ENDS
- ;
- ;--------------------------------
- ; EXTRA DATA AREA
- ;--------------------------------
- XXDATA SEGMENT AT 50H
- STATUS_BYTE DB ?
- XXDATA ENDS
- ;
- ;--------------------------------
- ; VIDEO DISPLAY BUFFER
- ;--------------------------------
- VIDEO_RAM SEGMENT AT 0B800H
- REGEN LABEL BYTE
- REGENW LABEL WORD
- DB 16384 DUP(?)
- VIDEO_RAM ENDS
- ;
- ;--------------------------------
- ; ROM RESIDENT CODE
- ;--------------------------------
- ROMCODE SEGMENT AT 0F000H
- DB 57344 DUP(?) ; FILL LOWEST 56K
- DB '5700051 CORP. IBM 1981' ; COPYRIGHT NOTICE
- ROMCODE ENDS
- ;
- ;--------------------------------
- ; PROGRAM SEGMENT PREFIX
- ;--------------------------------
- ;
- PROGRAM SEGMENT
- INT20 DW ;INT 20 for DOS return
- MEMORYSIZE DW ;TOTAL MEMORY SIZE
- CALLDOS_FAR DB 5 DUP(?) ; LONG CALL DOS DISPATCHER
- TERMADDR DB 4 DUP(?) ; TERMINATE ADDRESS (ip,cs)
- CTRLBREAK DB 4 DUP(?) ; ctrl_break EXIT ADDRESS
- RESERVED DB 4ah DUP(?) ; RESERVED AREA
- FCB_ONE DB 10H DUP(?) ; unopened fcb #1
- FCB_TWO DB 10H DUP(?) ; unopened fcb #2
- PARM_LENGTH DB ; LENGTH OF PARAMETERS
- PARM_FIELD DB 19 DUP(?) ; PARAMETER STRING DATA
- ;
- SUBTTL
- PAGE
- ORG 100H ; DEFAULT ENTRY ADDRESS
- PROGRAM_ENTRY EQU $